using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._LocationReferencingTools
{
    /// <summary>
    /// <para>Update Measures From LRS</para>
    /// <para>Populates or updates  the measures and route ID on Utility Network (UN) features such as pipes, devices, and junctions or on features in other non-UN or non-LRS feature classes.</para>
    /// <para>填充或更新公共设施网络 （UN） 要素（例如管道、设备和交汇点）或其他非 UN 或非 LRS 要素类中的要素上的测量值和路径 ID。</para>
    /// </summary>    
    [DisplayName("Update Measures From LRS")]
    public class UpdateMeasuresFromLRS : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public UpdateMeasuresFromLRS()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_lrs_network">
        /// <para>LRS Network</para>
        /// <para>The feature service layer that contains the routes, route IDs, and measures.</para>
        /// <para>包含路径、路径 ID 和测量值的要素服务图层。</para>
        /// </param>
        /// <param name="_lrs_date">
        /// <para>LRS Date</para>
        /// <para>The date used to define the temporal view of the network for collecting the route and measure values.</para>
        /// <para>用于定义网络时态视图以收集路径和测量值的日期。</para>
        /// </param>
        /// <param name="_in_features">
        /// <para>Input Features</para>
        /// <para>The layer that includes route ID and measure fields that will be updated based on feature geometry relative to routes in the LRS Network parameter.</para>
        /// <para>包含路径 ID 和测量字段的图层，这些字段将根据要素几何相对于 LRS 网络参数中的路径进行更新。</para>
        /// </param>
        /// <param name="_route_id_field">
        /// <para>Route ID Field</para>
        /// <para>The field in the Input Features layer that contains the route ID value.</para>
        /// <para>输入要素图层中包含路径 ID 值的字段。</para>
        /// </param>
        /// <param name="_from_measure_field">
        /// <para>Measure Field</para>
        /// <para>The field in the Input Features layer that contains the from measure value for polyline features.</para>
        /// <para>输入要素图层中包含折线要素的 from 测量值的字段。</para>
        /// </param>
        public UpdateMeasuresFromLRS(object _lrs_network, object _lrs_date, object _in_features, object _route_id_field, object _from_measure_field)
        {
            this._lrs_network = _lrs_network;
            this._lrs_date = _lrs_date;
            this._in_features = _in_features;
            this._route_id_field = _route_id_field;
            this._from_measure_field = _from_measure_field;
        }
        public override string ToolboxName => "Location Referencing Tools";

        public override string ToolName => "Update Measures From LRS";

        public override string CallName => "locref.UpdateMeasuresFromLRS";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_lrs_network, _lrs_date, _in_features, _route_id_field, _from_measure_field, _to_measure_field, _out_features, _out_details_file];

        /// <summary>
        /// <para>LRS Network</para>
        /// <para>The feature service layer that contains the routes, route IDs, and measures.</para>
        /// <para>包含路径、路径 ID 和测量值的要素服务图层。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("LRS Network")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _lrs_network { get; set; }


        /// <summary>
        /// <para>LRS Date</para>
        /// <para>The date used to define the temporal view of the network for collecting the route and measure values.</para>
        /// <para>用于定义网络时态视图以收集路径和测量值的日期。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("LRS Date")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _lrs_date { get; set; }


        /// <summary>
        /// <para>Input Features</para>
        /// <para>The layer that includes route ID and measure fields that will be updated based on feature geometry relative to routes in the LRS Network parameter.</para>
        /// <para>包含路径 ID 和测量字段的图层，这些字段将根据要素几何相对于 LRS 网络参数中的路径进行更新。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Features")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _in_features { get; set; }


        /// <summary>
        /// <para>Route ID Field</para>
        /// <para>The field in the Input Features layer that contains the route ID value.</para>
        /// <para>输入要素图层中包含路径 ID 值的字段。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Route ID Field")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _route_id_field { get; set; }


        /// <summary>
        /// <para>Measure Field</para>
        /// <para>The field in the Input Features layer that contains the from measure value for polyline features.</para>
        /// <para>输入要素图层中包含折线要素的 from 测量值的字段。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("Measure Field")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _from_measure_field { get; set; }


        /// <summary>
        /// <para>To Measure Field</para>
        /// <para>The field in the Input Features layer that contains the measure value for point features or the to measure value for polyline features.</para>
        /// <para>输入要素图层中包含点要素的测量值或折线要素的测量值的字段。</para>
        /// <para></para>
        /// </summary>
        [DisplayName("To Measure Field")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _to_measure_field { get; set; } = null;


        /// <summary>
        /// <para>Out Features</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Out Features")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_features { get; set; }


        /// <summary>
        /// <para>Output Details File</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Details File")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_details_file { get; set; }


        public UpdateMeasuresFromLRS SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}